/**题目：
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

来源：力扣（LeetCode）

/**
 * @param {string} s
 * @return {boolean}
 * bug1函数表达式和函数声名会因为变量和函数提升会有所不同
 * 算法改进：想要遍历一个字符串或数组或类数组对象(例如，arguments或NodeList)、
* TypedArray、Map、Set和用户定义的可迭代对象，不必用for循环，可用for..of
*  var a = { c: 1, d: 3 };
*  for (b of a) {
*      console.log(b);
*  }
 */
console.log(isValid('[]]{[]}'))

function isValid(s) {

    var item = []; //栈
    //取出栈顶的元素
    function peek() {
        if (item.length != 0) {
            return item[item.length - 1];
        } else {
            return null;
        }
    }
    //删除栈顶元素
    function popi() {
        if (item.length != 0) {
            item.pop();
        }
    }

    for (let i = 0; i < s.length; i++) {

        let a = peek() + s.charAt(i);
        if (a == '()') {
            popi();
        } else if (a == '[]') {
            popi();
        } else if (a == '{}') {
            popi();
        } else {
            item.push(s.charAt(i));
        }
    }
    if (item.length != 0) {
        return false;
    } else {
        return true;
    }
}